package de.akabahn.ebd.fahrplan;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import de.akabahn.ebd.fahrplan.io.FahrplanReader;
import de.akabahn.ebd.fahrplan.io.FahrplanWriter;
import de.akabahn.ebd.fahrplan.loader.FPLElementSystemLoader;
import de.akabahn.ebd.fahrplan.structure.Fahrplan;
import de.akabahn.ebd.fahrplan.structure.Station;
import de.akabahn.ebd.fahrplan.structure.Zuglauf;

/**
 * A class with some basic tests
 * 
 * @author Chris
 * 
 */
public class FahrplanToolSimpleTests {

    FahrplanElements elements;

    public FahrplanToolSimpleTests() {
	elements = new FahrplanElements();
	elements.initializeFrom(new FPLElementSystemLoader());
	// testFahrplanReader();
	testFahrplanWriter();
    }

    private void testFahrplanWriter() {
	String fileout1 = "data/SingleTrainOut.FPL";
	FahrplanWriter writer = new FahrplanWriter();

	Fahrplan fpl = getDemoFPL();

	try {
	    writer.writeFPLFile(fpl, fileout1);

	} catch (IOException e) {
	    e.printStackTrace();
	}

	System.out.println(writer.outputFPLCode(fpl));

    }

    private Fahrplan getDemoFPL() {
	Fahrplan demoFPL = new Fahrplan();
	ArrayList<Zuglauf> zuglaeufe = new ArrayList<Zuglauf>();

	Zuglauf demoZL = new Zuglauf();
	Zuglauf demoZL1 = new Zuglauf();
	demoZL1.setNumber("DP85401");
	Zuglauf demoZL2 = new Zuglauf();
	demoZL2.setNumber("DP85405");

	demoZL.setNumber("DP85402");
	demoZL.setWende(true);
	demoZL.setReady(true);
	demoZL.setPersonenZug(true);
	demoZL.setUmlauf(19);
	demoZL.setBaureihe(450);
	demoZL.setVmax(100);
	demoZL.setKommtAus(demoZL1);
	demoZL.setWirdZu(demoZL2);
	demoZL.setStationen(generateDemoStationsCorrect());

	zuglaeufe.add(demoZL);

	demoFPL.setZuglaeufe(zuglaeufe);
	return demoFPL;
    }

    private List<Station> generateDemoStationsCorrect() {
	List<Station> stationen = new ArrayList<Station>();

	stationen.add(new Station(elements.getBahnhoefe().get("ZDW"), "10:00",
		"10:02", "3", false, false, 30));
	stationen.add(new Station(elements.getBahnhoefe().get("ZDBU"), "10:04",
		"10:04", "", false, true, 30));
	stationen.add(new Station(elements.getBahnhoefe().get("ZDK"), "10:06",
		"10:07", "1", false, false, 30));
	stationen.add(new Station(elements.getBahnhoefe().get("ZDG"), "10:09",
		"10:09", "", false, true, 30));
	stationen.add(new Station(elements.getBahnhoefe().get("ZDS S"),
		"10:11", "10:11", "24", true, false, 30));

	return stationen;
    }

    private void testFahrplanReader() {
	String file1 = "data/SingleTrain.FPL";
	FahrplanReader reader = new FahrplanReader(file1);
	try {
	    reader.loadFromFPL();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
	new FahrplanToolSimpleTests();
    }

}
